home *** CD-ROM | disk | FTP | other *** search
- /*
- * Sys-Info, TTP-Version
- *
- * Autor: Volker Hemsen
- * Status: Public Domain
- *
- * 1.0 26. Dezember 1993
- * 1.1 28./31. März 1994
- * 1.2 22. Mai 1996
- * 1.3 03. Juli 1996
- * 1.4 07. Juli 1996
- * 1.5 15. September 1996
- * 1.6 01. März 1998
- *
- * Compiler: GNU-C 2.5.8
- */
-
- /*
- * Include-Dateien
- */
- #include <compiler.h>
- #include <stdio.h>
- #include <string.h>
- #include <osbind.h>
- #include "icb.h"
- #include <xhdi\xhdi.h>
-
- volatile long __stksize=10*1024;
- #include <aesbind.h>
- #include <vdibind.h>
- #include <xlb.h>
- #define __stdargs
- extern unsigned short _global[];
- #define _AESglobal _global
- #ifndef __MAKE_DEBUG__
- # define vq_gdos vq_vgdos
- #endif
- long get_long(long *aptr);
- long get_long(long *aptr)
- {
- static long lpeek(void)
- {
- return *aptr;
- }
- return Supexec(lpeek);
- }
-
-
- /*
- * defines & typedefs
- */
- #define VERSION 0x0160
- #define DATE "12/93-03/98"
- #define PHYSTOP ((long*)0x042E)
- #define RAMVALID ((long*)0x05A8)
- #define RAMTOP ((long*)0x05A4)
- #define SYSBASE ((long*)0x04F2)
- #define PUNPTR ((long*)0x0516)
- #define NFLOPS ((long*)0x04A4)
- #define AHDI 0x41484449L
- #define _nAES 0x6e414553L
- #ifndef ULONG
- #define ULONG unsigned long
- #endif
-
- typedef struct _dosdate
- {
- unsigned year : 7;
- unsigned month : 4;
- unsigned day : 5;
- } DOSDATE;
-
- typedef struct _osheader
- {
- short os_entry;
- short os_version;
- void *reseth;
- struct _osheader *os_beg;
- void *os_end;
- long os_rsv1;
- void *os_magic;
- long os_date;
- short os_conf;
- short os_dosdate;
- } OSHEADER;
-
- typedef struct
- {
- short nvdi_version;
- long nvdi_datum;
- struct {
- unsigned : 9;
- unsigned alert : 1;
- unsigned : 1;
- unsigned linea : 1;
- unsigned mouse : 1;
- unsigned gemdos : 1;
- unsigned fehler : 1;
- unsigned gdos : 1;
- } nvdi_config;
- } NVDI_STRUCT;
-
- typedef struct
- {
- short puns;
- char pun[16];
- long part_start[16];
- long P_cookie;
- long *P_cookptr;
- unsigned short P_version;
- unsigned short P_max_sector;
- long reserved[16];
- } PUN_INFO;
-
- typedef struct
- {
- ULONG drivemap;
- char *version;
- long reserved[2];
- } METAINFO;
-
- #define RESERVED_SIZE 10
- typedef struct {
- DOSDATE date;
- short (*reserve)(void);
- short (*init)(void);
- short (*deinit)(void);
- short (*switch_output)(void);
- char *text_buffer;
- short max_lines,x_size,y_size,x_vis,y_vis,x_off,y_off,
- char_w,char_h,vdi_handle,text_offset,curser_handle,
- reserved[RESERVED_SIZE];
- } TOS2GEM_COOKIE;
-
- typedef struct {
- unsigned short version;
- unsigned short date;
- unsigned short time;
- unsigned short flags;
- /*CNF_VAR*/ void **config;
- unsigned long unused_2;
- } N_AESINFO;
-
-
- /*
- * globale Variablen
- */
- char *fpustr[]={"","68881/2","68881","68882","68040","","68060"};
- char *mchstr[4]={"ST","STE","TT"};
- char *fdcstr[]={"DD","HD","ED"};
-
- /* Termcap-Variablen mit VT52-Sequenzem vorbelegt: */
- #define TT_LEN 40
- char tt_bold_on[TT_LEN]="p";
- char tt_reverse_on[TT_LEN]="p";
- char tt_end_all[TT_LEN]="q";
- char tt_curser_up[TT_LEN]="A";
- char tt_delete_line[TT_LEN]="l";
-
- static METAINFO metainfo={0L,NULL,0L,0L};
-
-
- /*
- * Prototypes
- */
- void Metainit(METAINFO *buffer);
- #define Metainit(buffer) (void)trap_14_wl((short)(0x30),(long)(buffer))
-
- extern short get_cpuclock(void);
- extern short get_fpuclock(void);
-
- extern long get_long(long *aptr);
- extern char *hversionstr(char *s,short v);
- extern char *versionstr(char *s, short v);
- extern char *bcd_date(char *s, long l, short english);
- extern char *dos_date(char *s, DOSDATE d);
- extern void outline(char *lstr, char *mstr, char *rstr);
- extern void outversion(void);
- extern void outhardware(void);
- extern void outmemory(void);
- extern void outsoftware(void);
- extern void outdrives(void);
- extern int main(int argc, char *argv[], char *envp[]);
-
-
-
- /*
- * Unterprogramme
- */
-
- char *hversionstr(char *s,short v)
- {
- sprintf(s,"%x.%02x",v>>8,v&0xFF);
- return s;
- }
-
- char *versionstr(char *s,short v)
- {
- sprintf(s,"%d.%02d",v>>8,v&0xFF);
- return s;
- }
-
- char *bcd_date(char *s,long l,short english)
- {
- sprintf(s,"%02x.%02x.%02x",(short)((l>>(english ? 16:24))&0xFF),
- (short)((l>>(english ? 24:16))&0xFF),(short)(l&0xFFFFL));
- return s;
- }
-
- char *dos_date(char *s,DOSDATE d)
- {
- sprintf(s,"%02d.%02d.%04d",d.day,d.month,d.year+1980);
- return s;
- }
-
-
- void outline(char *lstr,char *mstr,char *rstr)
- {
- static void outspace(long val)
- {
- char s[100];
- register int i;
- for(i=0;(i<val)&&(i<100);s[i++]=' ');
- s[i]='\0';
- printf("%s",s);
- }
- if ((lstr) || (mstr) || (rstr)) {
- if (lstr)
- printf("%s%s%s",tt_bold_on,lstr,tt_end_all);
- outspace(11L-strtst(lstr));
- if (mstr)
- printf("%s",mstr);
- if (rstr) {
- outspace(20L-strtst(mstr));
- printf("%s",rstr);
- }
- printf("\n");
- }
- }
-
- void outversion(void)
- {
- char rstr[80]="";
- hversionstr(rstr,VERSION);
- strcat(rstr,", ");
- strcat(rstr,DATE);
- outline("Sysinfo","Version",rstr);
- outline(NULL,"Public Domain, written by Volker Hemsen",NULL);
- }
-
- void outhardware(void)
- {
- char rstr[80]="";
- long l;
- {
- long cpu,cpucl=0L;
- if (getcookie(_CPU,&cpu)) {
- sprintf(rstr,"68%03d",(int)cpu);
- if (!getcookie(_CPUC,&cpucl))
- {
- if (cpu==30)
- cpucl=get_cpuclock();
- }
- if (cpucl)
- sprintf(&rstr[strlen(rstr)],"-%dMHz",(short)cpucl);
- } else
- strcpy(rstr,"unbekannt");
- outline("Hardware","CPU",rstr);
- }
- {
- long fpu,fpucl=0L;
- if (getcookie(_FPU,&fpu)) {
- fpu=((fpu>>16)&0xFFFF);
- if (fpu==1)
- strcpy(rstr,"I/O-68881 (SFP 004)");
- else {
- strcpy(rstr,fpustr[(fpu>>1)&7]);
- if (!getcookie(_FPUC,&fpucl))
- fpucl=get_fpuclock();
- if (fpucl)
- sprintf(&rstr[strlen(rstr)],"-%dMHz",(short)fpucl);
- }
- outline(NULL,"FPU",rstr);
- }
- }
- if (getcookie(_MCH,&l)) {
- if (l==0xFFFFFFFF)
- strcpy(rstr,"Fremdhersteller");
- else {
- strcpy(rstr,mchstr[(l>>16)&3]);
- if ((l&0xFFFF)==0x0010)
- strins(rstr,"MEGA ");
- }
- outline(NULL,"Rechnertyp",rstr);
- }
- if (getcookie(_MNAM,&l))
- outline(NULL,"Systemname",(char*)l);
- if (getcookie(_SND,&l)) {
- if (l&1)
- strcpy(rstr,"GI/Yamaha");
- if (l&2)
- strcat(rstr,", Stereo-DMA");
- outline(NULL,"Sound",rstr);
- }
- if (getcookie(_VDO,&l)) {
- strcpy(rstr,mchstr[(l>>16)&3]);
- outline(NULL,"Videosystem",rstr);
- }
- {
- register short bl=Blitmode(-1);
- if (bl>=0) {
- if (bl&2) {
- strcpy(rstr,"vorhanden und ");
- if (bl&1)
- strcat(rstr,"an");
- else
- strcat(rstr,"aus");
- } else
- strcpy(rstr,"nicht vorhanden");
- outline(NULL,"Blitter",rstr);
- }
- }
- }
-
- void outmemory(void)
- {
- static long ramsum_free=0L,ramsum_max=0L;
- static void hasram(char *s,long maxmem,long freemem)
- {
- int prozent;
- if ((maxmem!=-1) && (freemem!=-1)) {
- ramsum_free+=freemem;
- ramsum_max+=maxmem;
- } else {
- freemem=ramsum_free;
- maxmem=ramsum_max;
- }
- prozent=(int)((freemem*100L)/maxmem);
- sprintf(s,"% 6d:% 6dkB=% 2d%c ",(int)(freemem>>10),(int)(maxmem>>10),prozent,'%');
- {
- register int ii;
- register char *p;
- char *c="*-";
- if (*tt_reverse_on)
- c="-+";
- strcat(s,tt_reverse_on);
- p=&s[strlen(s)];
- for(ii=5;ii<=prozent;ii+=5,*p++=*c);
- strcpy(p,tt_end_all);
- p+=strlen(tt_end_all);
- for(ii=prozent;ii<100;ii+=5,*p++=c[1]);
- *p='\0';
- }
- }
- char rstr[80]="";
- long l,lmax;
- if (Sversion()>=0x1900)
- l=(long)Mxalloc(-1L,0);
- else
- l=(long)Malloc(-1L);
- lmax=get_long(PHYSTOP);
- hasram(rstr,lmax,l);
- outline("Speicher","ST-RAM",rstr);
- if (get_long(RAMVALID)==0x1357bd13) {
- rstr[0]=0;
- if (Sversion()>=0x1900)
- l=(long)Mxalloc(-1L,1);
- else
- l=0;
- lmax=get_long(RAMTOP)-(1L<<24);
- if (lmax>=0) {
- hasram(rstr,lmax,l);
- outline(NULL,"TT-RAM",rstr);
- }
- }
- hasram(rstr,-1,-1);
- outline(NULL,"Summe",rstr);
- {
- register OSHEADER *os=(OSHEADER*)get_long(SYSBASE);
- if (os) {
- sprintf(rstr,"$%lX",(long)os->os_beg);
- outline(NULL,"ROM-Start",rstr);
- }
- }
- }
-
- void outsoftware(void)
- {
- char rstr[80]="";
- long l;
- /* OS-Version */
- {
- register OSHEADER *os=(OSHEADER*)get_long(SYSBASE);
- if (os) {
- hversionstr(rstr,os->os_version);
- strcat(rstr,", ");
- bcd_date(&rstr[strlen(rstr)],os->os_date,1);
- outline("Software","TOS",rstr);
- }
- }
- /* GEMDOS-Version */
- outline(NULL,"GEMDOS-Version",hversionstr(rstr,intelshort(Sversion())));
- /* Meta-DOS-Version */
- Metainit(&metainfo);
- if (metainfo.version)
- outline(NULL,"Meta-DOS",metainfo.version);
- /* MiNT-Version */
- if (getcookie(_MiNT,&l))
- outline(NULL,"MiNT-Version",versionstr(rstr,l));
- /* Filelocking */
- if (getcookie(_FLK,&l))
- outline(NULL,"File-Locking","verfügbar");
- /* TOS2GEM */
- {
- TOS2GEM_COOKIE *t2gm;
- if (getcookie(_T2GM,(long*)&t2gm)) {
- short b;
- dos_date(rstr,t2gm->date);
- strcat(rstr,", (");
- strcat(rstr,(b=(t2gm->reserve()))?"frei)":"belegt)");
- if (b)
- t2gm->deinit();
- outline(NULL,"TOS2GEM",rstr);
- }
- }
- /* AES-Version */
- /* if (appl_init()>=0) {
- hversionstr(rstr,_AESglobal[0]);
- appl_exit();
- outline(NULL,"AES-Version",rstr);
- }*/
- /* N.AES-Version */
- {
- N_AESINFO* naes;
- if (getcookie(_nAES,(long*)&naes)) {
- hversionstr(rstr,naes->version);
- strcat(rstr,(naes->flags&1)?" TT":" ST");
- if (naes->flags&2)
- strcat(rstr," debug");
- outline(NULL,"N.AES-Version",rstr);
- }
- }
- /* GDOS-Kennung */
- if (vq_gdos()) {
- l=vq_vgdos();
- if (l>0L) {
- strncpy(rstr,(char*)&l,4);
- rstr[4]=0;
- } else
- strcpy(rstr,"unbekannt");
- outline(NULL,"GDOS-Kennung",rstr);
- }
- /* NVDI-/NOVA-Version, Auflösung */
- {
- NVDI_STRUCT *nvdi;
- if (getcookie(_NVDI,(long*)&nvdi)) {
- hversionstr(rstr,nvdi->nvdi_version);
- strcat(rstr,", ");
- bcd_date(&rstr[strlen(rstr)],nvdi->nvdi_datum,0);
- outline(NULL,"NVDI-Version",rstr);
- }
- }
- {
- ICB *icb=NULL; /* NOVA-Treiber-Cookie */
- getcookie(_IMNE,(long*)&icb);
- if (icb) {
- strncpy(rstr,(char*)&icb->id,4);
- rstr[4]=0;
- outline(NULL,"NOVA-Treiberversion",rstr);
- outline(NULL,"Auflösung",icb->name);
- } else {
- int work_out[57],vhandle=0,dummy;
- int work_in[11]={1,1,1,1,1,1,1,1,1,1,2};
- /*vhandle=graf_handle(&dummy,&dummy,&dummy,&dummy);*/
- v_opnvwk(work_in,&vhandle,work_out);
- if (vhandle>=1) {
- sprintf(rstr,"%dx%dx",work_out[0]+1,work_out[1]+1);
- switch(work_out[13]) {
- case 0: strcat(rstr,"true color");
- case 0x7FFF: strcat(rstr,"high color");
- default: sprintf(&rstr[strlen(rstr)],"%d",work_out[13]);
- }
- v_clsvwk(vhandle);
- outline(NULL,"Auflösung",rstr);
- }
- }
- }
- }
-
- void outdrives(void)
- {
- static char *drivelist(char *rstr,ULONG drivemap)
- {
- register char *u=rstr;
- register int jj;
- for(jj=0;jj<32;jj++,drivemap>>=1)
- if (drivemap&1)
- *u++=(char)(0x41+jj);
- *u=0;
- return rstr;
- }
- char rstr[80]="";
- /* GEMDOS-Laufwerke */
- outline("Laufwerke","GEMDOS-Liste",drivelist(rstr,Dsetdrv((int)Dgetdrv())));
- /* Meta-DOS-Laufwerke */
- Metainit(&metainfo);
- if (metainfo.version)
- outline(NULL,"MetaDOS-Liste",drivelist(rstr,metainfo.drivemap));
- /* Diskettenlaufwerke */
- {
- long l;
- sprintf(rstr,"%d",(short)get_long(NFLOPS));
- if (getcookie(_FDC,&l)) {
- l=((l&0xFFFFFFL)<<8);
- sprintf(&rstr[strlen(rstr)]," x %s:%s",fdcstr[(l>>24)&3],(char*)&l);
- }
- outline(NULL,"Diskettenlaufwerke",rstr);
- }
- /* AHDI-Festplatten */
- {
- register PUN_INFO *puninfo=(PUN_INFO*)get_long(PUNPTR);
- if (puninfo!=NULL) {
- sprintf(rstr,"%d",puninfo->puns);
- outline(NULL,"Festplatten",rstr);
- strncpy(rstr,(char*)&puninfo->P_cookie,4);
- rstr[4]=' ';
- hversionstr(&rstr[5],puninfo->P_version);
- outline(NULL,"HD-Treiber",rstr);
- }
- }
- {
- int v=XHGetVersion();
- if (v>0) {
- outline(NULL,"XHDI-Version",hversionstr(rstr,v));
- outline(NULL,"XHDI-Liste",drivelist(rstr,(ULONG)XHDrvMap()));
- }
- }
- }
-
- int main(int argc,char *argv[],char *envp[])
- {
- boolean wait_key=FALSE;
- static void ask_for_key(boolean mode)
- {
- if (wait_key) {
- printf("%sFür %s Return-Taste drücken!%s",(mode)?tt_reverse_on:tt_bold_on,
- (mode)?"Ende":"Weiter",tt_end_all);
- fgetc(stdin);
- if (!mode)
- printf("%s%s",tt_curser_up,tt_delete_line);
- }
- }
- boolean out_version=FALSE,out_hardware=FALSE,out_software=FALSE,out_memory=FALSE;
- boolean out_drives=FALSE,out_help=FALSE;
- static boolean getopt(char *s)
- {
- if (*s=='-')
- switch(s[1]) {
- case 'i':
- case 'v': out_version=TRUE; break;
- case 'a': out_hardware=TRUE; out_memory=TRUE; out_software=TRUE; out_drives=TRUE; break;
- case 'h': out_hardware=TRUE; break;
- case 'r':
- case 'm': out_memory=TRUE; break;
- case 's':
- case 'o': out_software=TRUE; break;
- case 'l':
- case 'd':
- case 'f': out_drives=TRUE; break;
- case 'k':
- case 'w': wait_key=TRUE; break;
- default: out_help=TRUE; out_version=TRUE; break;
- }
- return FALSE;
- }
- if (initterm()) {
- if (!tgetstrx("md",tt_bold_on))
- tgetstrx("so",tt_bold_on);
- tgetstrx("mr",tt_reverse_on);
- if (!tgetstrx("me",tt_end_all))
- tgetstrx("se",tt_end_all);
- tgetstrx("dl",tt_delete_line);
- tgetstrx("up",tt_curser_up);
- }
- getargvopt(argc,argv,getopt);
- if (out_version) outversion();
- if (out_help) {
- outline("Syntax","-v(ersion) -w(ait for key) -a(ll)",NULL);
- outline(NULL,"-h(ardware) -m(emory) -s(oftware) -l(aufwerke)",NULL);
- }
- if ((!out_hardware)&&(!out_memory)&&(!out_software)&&(!out_drives)) {
- out_hardware=TRUE;
- out_memory=TRUE;
- out_software=TRUE;
- out_drives=TRUE;
- }
- if (out_hardware) {
- if ((out_version)||(out_help))
- ask_for_key(FALSE);
- outhardware();
- }
- if (out_memory) {
- ask_for_key(FALSE);
- outmemory();
- }
- if (out_software) {
- ask_for_key(FALSE);
- outsoftware();
- }
- if (out_drives) {
- ask_for_key(FALSE);
- outdrives();
- }
- ask_for_key(TRUE);
- return 0;
- }
-